// 描述

// 假设表达式中允许包含两种括号：圆括号和方括号，其嵌套的顺序随意，但需要成对出现。即()或 [([ ][ ])]等为正确的格式，[ ( ] )或 ( [ ( ) )或( ( ) ] )均为不正确的格式。
// 给定一串括号输入（换行作为结束符），检测格式是否正确，若正确输出YES；错误输出NO。
// （括号数量≤100）

// 输入描述

// 无

// 输出描述

// 无

// 样例输入 1 

// ([]())
// 样例输出 1 

// YES

#include <bits/stdc++.h>
using namespace std;

stack <char> s;
char a[201];

int main(){
    cin >> a;
    int len = strlen(a);
    for( int i=0;i<len;i++){
        if(a[i]=='['||a[i]=='('){
            s.push(a[i]);
        }else if (a[i]==']'&&s.empty()!=1&&s.top()=='['){
            s.pop();
        }else if (a[i]==')'&&s.empty()!=1&&s.top()=='('){
            s.pop();
        }else{
            cout<<"NO";
            return 0;
        }
    }
    if(s.empty()){
        cout<<"YES";
    }else{
        cout<<"NO";
    }
    return 0;
}

